Func[f_,range_]:=Manipulate[
n=Floor[n];
approx=Table[f/.range[[1]]->j,{j,range[[2]],range[[3]],((range[[3]]-range[[2]])/n)}];
Graphics[
{ParametricPlot[f,range][[1]][[1]][[3]][[1]][[2]],
Red,Line[approx],
Blue,Text["Length of Curve:",{0,0.05}], Text[N[NIntegrate[Norm[D[f,range[[1]]]],range],3],{0.35,0.05}],
Green,Text["Length of Approx:",{0,-0.05}], Text[N[Plus@@Function[Norm[{#1,#2}]]@@@Differences[approx],4],{0.35,-0.05}]
}],{n,2,30}]
Func[{Sin[t],Sin[2t]},{t,0,2Pi}]

Func3D[f_,rangex_,rangey_]:=Manipulate[
n=Floor[n];m=Floor[m];
xvar=rangex[[1]];yvar=rangey[[1]];dx=((rangex[[3]]-rangex[[2]])/n);dy=((rangey[[3]]-rangey[[2]])/m);
approx=Flatten[Table[Polygon[{f/.{xvar->j,yvar->k},f/.{xvar->j+dx,yvar->k},f/.{xvar->j+dx,yvar->k+dy},f/.{xvar->j,yvar->k+dy}}],{j,rangex[[2]],rangex[[3]]-dx,dx},{k,rangey[[2]],rangey[[3]]-dy,dy}],1];
{Graphics3D[
{ParametricPlot3D[f,rangex,rangey,Mesh->0][[1]],
Red,Opacity[0.4],approx,
(*Blue,Text["Length of Curve:",{0,0,0}], Text[Integrate[Norm[Cross[D[f,xvar],D[f,yvar]]],rangex,rangey]],
Green,Text["Length of Approx:",{0,0,0}], Text[N@Plus@@Map[Area,approx],{0,0,0}]*)
}]
,"Length of Curve:"<>ToString[N[NIntegrate[Norm[Cross[D[f,xvar],D[f,yvar]]],rangex,rangey],3]]<>" Length of approx:"<>ToString[N[Plus@@Map[Area,approx],3]]}
 ,{n,3,30},{m,1,30}]

Func[{Sin[t],Sin[2t]},{t,0,2Pi}]

In this 2D case the length of the curve is sup of the linear approximation

Func3D[{Sin[t]*(u^0.2),Cos[t]*(u^0.2),u},{t,0,2Pi},{u,0.1,1}]

In this 3D case the area of the surface is still sup of the linear approximation

Func3D[{Sin[t]*(u^(-10)),Cos[t]*(u^(-10)),u},{t,0,2Pi},{u,1,3}]

In this case the area of the linear approximation is greater than the area of the surface so the area is not the sup of the linear approximation